package com.hjq.exception;

import com.hjq.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
// 声明于全局异常处理类上
@RestControllerAdvice
@Slf4j
/**
 * 全局异常处理类
 */
public class GlobalExceptionHandler {
    /**
     * 处理异常 Exception
     * @param e 异常
     * @return 错误信息
     */
    @ExceptionHandler
    public Result handleException(Exception e){
        log.error("服务器错误:",e);
        return Result.error("服务器错误，请联系管理员");
    }
    // DuplicateKeyException,重复键异常，数据库表中的数据违反唯一约束后抛出的异常
    // 对于多个异常处理的方法，会按照所抛出的异常，从下往上，进行匹配
    /**
     * 处理异常 handleDuplicateKeyException
     * @param e 异常
     * @return 错误信息
     */
    @ExceptionHandler
    public Result handleDuplicateKeyException(DuplicateKeyException e){
        log.error("服务器错误:",e);
        String message = e.getMessage();
        String[] split = message.substring(message.indexOf("Duplicate entry")).split(" ");
        String errMessage = split[2];
        return Result.error(errMessage+"已经存在");
    }
    /**
     * 处理异常 ForeignKeyException
     * @param e 异常
     * @return 错误信息
     */
    @ExceptionHandler
    public Result handleForeignKeyException(ForeignKeyException e) {
        log.error("服务器错误:",e);
        return Result.error(e.getMessage());
    }
}
